﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.OracleClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Util
{
    public class DBHelpr
    {
        //从配置文件中获取连接字符串
        public static string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;    
        /**
         *1.BY条件insert、update、delete并返回影响行数，ExecuteNonQuery返回int类型；
         * 适用于新增、修改、删除。 
         */
        public static int ExecuteNonQuery(string sql, params OracleParameter[] pms)
        {
            OracleConnection conn = new OracleConnection(connstr);
            conn.Open();
            using (OracleCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                foreach (OracleParameter s in pms)
                {
                    cmd.Parameters.Add(s);
                }
                return cmd.ExecuteNonQuery();
            }         
        }
        /**
         * 查询方式一：
         * 1.BY条件查询并返回结果，ExecuteReader返回 OracleDataReader对象；
         * 在读取数据的时候需要一直连接数据库。也就是说conn连接要一直打开。
         * ,适用于数据量大，需要不停地获取数据查询。
         */
        public static OracleDataReader ExecuteReader(string sql, params OracleParameter[] pms)
        {
                OracleConnection conn = new OracleConnection(connstr);            
                conn.Open();
                using (OracleCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                    foreach (OracleParameter s in pms)
                    {
                        cmd.Parameters.Add(s);
                    }
                    return cmd.ExecuteReader();
                }
            
        }
        /**
         * 查询方式二：
         * 1.BY条件查询并返回结果，ExecuteScalar返回 Object对象；
         * 查询结果集只返回第一行第一列的数据,适用于统计数量。
         */
        public static object ExecuteScalar(string sql, params OracleParameter[] pms)
        {
            OracleConnection conn = new OracleConnection(connstr);
            conn.Open();
            using (OracleCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                foreach (OracleParameter s in pms)
                {
                    cmd.Parameters.Add(s);
                }
                return cmd.ExecuteScalar();
            }           
        }
        /**
        * 查询方式三：
        * 1.BY条件查询并返回结果，OracleDataAdapter返回 DataTable对象；
        * 查询结果集只返回第一行第一列的数据,适用于统计数量。
        */
        public static DataTable DataTable(string sql, params OracleParameter[] pms)
        {
            OracleConnection conn = new OracleConnection(connstr);
            conn.Open();
            using (OracleCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                foreach (OracleParameter s in pms)
                {
                    cmd.Parameters.Add(s);
                }
                DataTable dt = new DataTable();
                using (OracleDataAdapter dr = new OracleDataAdapter(cmd))
                {                 
                    dr.Fill(dt);                  
                    return dt;                                      
                }           
            }                                
        }
        /**
      * 查询方式四：
      * 1.BY条件查询并返回结果，OracleDataAdapter返回 DataSet对象；
      * 查询结果集只返回第一行第一列的数据,适用于统计数量。
      */
        public static DataTable DataSetFromTable(string sql, params OracleParameter[] pms)
        {
            OracleConnection conn = new OracleConnection(connstr);
            conn.Open();
            using (OracleCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                foreach (OracleParameter s in pms)
                {
                    cmd.Parameters.Add(s);
                }

                DataSet ds = new DataSet();
                using (OracleDataAdapter dr = new OracleDataAdapter(cmd))
                {
                    dr.Fill(ds);
                    DataTable dt = ds.Tables[0]; //一个ds里面可以有很多个DataTabale表，这里我们取它的第一个表。（索引从0开始）         
                    return dt; //返回一个DataTable类型名字为dt的表
                }
            }
        }
        /**
       * 查询方式五：
       * 1.BY条件查询并返回结果，OracleDataAdapter返回 DataSet对象；
       * 查询结果集只返回第一行第一列的数据,适用于统计数量。
       */
        public static DataSet DataSet(string sql, params OracleParameter[] pms)
        {
            OracleConnection conn = new OracleConnection(connstr);
            conn.Open();
            using (OracleCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = sql;
                foreach (OracleParameter s in pms)
                {
                    cmd.Parameters.Add(s);
                }
                DataSet ds = new DataSet();
                using (OracleDataAdapter dr = new OracleDataAdapter(cmd))
                {
                    CheckNull ck = new CheckNull();
                    dr.Fill(ds);
                    return ds;
                }
            }
        }
       
    }
}

